Optional এর সাথে Functional Programming

Optional Class - জাভা ফাংশনাল প্রোগ্রামিং (Java Functional Programming) - Java Technologies

323

Java 8 তে Optional একটি নতুন কনসেপ্ট হিসেবে প্রবর্তন করা হয়, যা null মান (null values) কে নিরাপদভাবে পরিচালনা করার জন্য ব্যবহৃত হয়। Functional Programming এর ধারণা অনুসরণ করে Optional ব্যবহার করা হয়, যা কোডের ক্লিনলিনেস এবং সেফটি বৃদ্ধি করে এবং null-সংশ্লিষ্ট ত্রুটিগুলি কমাতে সাহায্য করে।

Optional এর ধারণা:

Optional একটি container object যা হতে পারে:

  • একটি মান (non-null value), অথবা
  • null (অর্থাৎ, কোনও মান নেই)

Optional মূলত এমন একটি wrapper যা কোনো মান থাকতে পারে বা নাও থাকতে পারে, এবং এটি ফাংশনাল প্রোগ্রামিং প্যাটার্নে ব্যবহার করা হয় যেন কোডের মধ্যে null চেকের দরকার না হয়।

Optional এর সুবিধা:

  1. Null Safety: Optional ক্লাসের মাধ্যমে null pointer exception (NPE) হ্যান্ডেল করা সহজ হয়।
  2. Functional Approach: Optional এর মাধ্যমে আপনি functional style এর মতো কোড লিখতে পারেন, যেমন map, filter, flatMap ইত্যাদি।
  3. Cleaner Code: Optional ব্যবহার করলে null চেকের জন্য প্রচুর if-else স্টেটমেন্টের প্রয়োজন হয় না, ফলে কোড পরিষ্কার হয়।

Optional ক্লাসের মূল মেথড:

Optional ক্লাসটি বিভিন্ন মেথড প্রদান করে যা আপনাকে মান (value) পরিচালনায় সাহায্য করে। কিছু গুরুত্বপূর্ণ মেথড হলো:

  • of(): একটি non-null মানের জন্য Optional তৈরি করে।
  • empty(): একটি empty Optional তৈরি করে (যেখানে মান নেই)।
  • ofNullable(): একটি নাল বা non-null মানের জন্য Optional তৈরি করে।
  • get(): Optional থেকে মান প্রাপ্তি। কিন্তু, এটি যদি null হয় তবে NoSuchElementException থ্রো করবে, তাই এর ব্যবহার ঝুঁকিপূর্ণ।
  • isPresent(): যদি Optional এর মধ্যে মান থাকে, তবে true ফেরত দেয়।
  • ifPresent(): যদি Optional এর মধ্যে মান থাকে, তবে একটি কাজ (ইতিবাচক ক্রিয়া) চালায়।
  • map(): Optional এর মধ্যে থাকা মানের উপর কোনো ফাংশন প্রয়োগ করতে ব্যবহৃত হয়।
  • flatMap(): Optional এর মধ্যে থাকা মানকে ফাংশনাল অপারেশনে প্রক্রিয়া করতে ব্যবহৃত হয়।
  • filter(): একটি শর্তের উপর ভিত্তি করে Optional এর মান ফিল্টার করতে ব্যবহৃত হয়।

Optional এর সাথে Functional Programming এর ব্যবহার:

ফাংশনাল প্রোগ্রামিং প্যাটার্নে Optional ব্যবহৃত হয় null চেকের পরিবর্তে ফাংশনাল অপারেশন করতে, যেমন map(), filter(), এবং flatMap()

1. map() মেথড:

map() মেথডটি Optional এর মধ্যে থাকা মানের উপর একটি ফাংশন প্রয়োগ করে একটি নতুন Optional প্রদান করে। এটি শুধুমাত্র তখনই ফাংশনটি প্রয়োগ করে যখন Optional এর মধ্যে মান থাকে।

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        Optional<String> name = Optional.of("Alice");

        // map() to convert value
        Optional<String> upperCaseName = name.map(String::toUpperCase);
        upperCaseName.ifPresent(System.out::println);  // Output: ALICE
    }
}

এখানে, map() মেথড ব্যবহার করে Optional এর মধ্যে থাকা স্ট্রিংটি uppercase এ পরিবর্তন করা হয়েছে।

2. filter() মেথড:

filter() মেথডটি Optional এর মধ্যে থাকা মানকে একটি শর্তের ভিত্তিতে ফিল্টার করতে ব্যবহৃত হয়। এটি যখন শর্ত পূর্ণ হয় তখন একটি নতুন Optional ফেরত দেয়, অন্যথায় একটি খালি Optional ফেরত দেয়।

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        Optional<Integer> number = Optional.of(10);

        // filter() to check condition
        Optional<Integer> filteredNumber = number.filter(n -> n > 5);
        filteredNumber.ifPresent(System.out::println);  // Output: 10
    }
}

এখানে, filter() মেথড ব্যবহার করে আমরা সংখ্যাটিকে ৫ এর বেশি কিনা তা চেক করেছি। যদি সংখ্যাটি ৫ এর বেশি হয়, তাহলে সেটি প্রক্রিয়াকরণ হবে, অন্যথায় এটি খালি Optional হবে।

3. flatMap() মেথড:

flatMap() মেথডটি একটি ফাংশন প্রাপ্ত Optional কে মানে রূপান্তরিত করে এবং তা একটি নতুন Optional প্রদান করে। এটি Optional গুলি চেইন করার জন্য ব্যবহৃত হয়।

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        Optional<String> name = Optional.of("Alice");

        // flatMap() to apply transformation and return Optional
        Optional<String> result = name.flatMap(n -> Optional.of(n.toLowerCase()));
        result.ifPresent(System.out::println);  // Output: alice
    }
}

এখানে, flatMap() ব্যবহার করে আমরা Optional এর মধ্যে থাকা মানকে ছোট হাতের অক্ষরে রূপান্তরিত করেছি এবং একটি নতুন Optional তৈরি করেছি।

4. ifPresent() মেথড:

ifPresent() মেথডটি Optional এর মধ্যে মান থাকা অবস্থায় একটি অ্যাকশন (যেমন, লম্বা লজিক বা আউটপুট) চালায়। এটি মূলত side effect তৈরি করার জন্য ব্যবহৃত হয়।

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        Optional<String> name = Optional.of("Alice");

        // ifPresent() to perform action if value is present
        name.ifPresent(n -> System.out.println("Name is: " + n));  // Output: Name is: Alice
    }
}

এখানে, ifPresent() ব্যবহৃত হচ্ছে যদি Optional এর মধ্যে কোনো মান থাকে, তবে একটি লজিক কার্যকরী করা হবে।


Optional এর সাথে Null Safety:

Null Safety নিশ্চিত করার জন্য Optional ব্যবহার করা হয়, যাতে কোডের মধ্যে NullPointerException কমানো যায়। Optional এর মাধ্যমে আপনি null চেক করতে পারেন এবং প্রয়োজনে কোনো ডিফল্ট মান প্রদান করতে পারেন।

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        Optional<String> name = Optional.ofNullable(null);

        // orElse() to provide default value if value is not present
        String result = name.orElse("Unknown");
        System.out.println(result);  // Output: Unknown
    }
}

এখানে, orElse() মেথড ব্যবহার করে আমরা null মানের জন্য একটি ডিফল্ট মান (এখানে "Unknown") প্রদান করেছি।


Optional এর অন্যান্য মেথড:

  • isPresent(): যদি Optional এর মধ্যে মান থাকে, তবে true ফেরত দেয়।
  • orElseGet(): এটি orElse() এর মতো, তবে এখানে ডিফল্ট মানটি একটি supplier function হতে পারে।
  • orElseThrow(): এটি Optional এর মধ্যে মান না থাকলে একটি এক্সেপশন ফেলে।
Optional<String> name = Optional.ofNullable(null);

// Throws an exception if no value is present
String result = name.orElseThrow(() -> new IllegalArgumentException("Name is required"));

সারাংশ:

Optional ক্লাস Java 8 এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা null চেকের জন্য নিরাপদ এবং কার্যকরী পদ্ধতি সরবরাহ করে। এটি ফাংশনাল প্রোগ্রামিং ধারণার মধ্যে ব্যবহৃত হয় যেখানে map, flatMap, filter, ifPresent, এবং orElse ইত্যাদি অপারেশনগুলি ব্যবহার করা হয়। Optional ব্যবহারের মাধ্যমে আপনি কোডের মধ্যে null pointer exception (NPE) থেকে বাঁচতে পারেন এবং একটি সুনির্দিষ্ট, পরিষ্কার এবং নিরাপদ কোড তৈরি করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...